import logging

from flask import (request, jsonify)
from functools import wraps

from app.common.redis import redis_cli
from app.setting import TOKEN_REDIS_EXPIRE_TIME


def token_required(f):
    """
    用户token装饰器
    :param f:
    :return:
    """

    @wraps(f)
    def decorated_function(*args, **kwargs):
        token = request.values.get('token', None)
        if not token:
            logging.info("+++++ 未带token参数")
            result = dict(code=1000, msg="未带token参数")
            return jsonify(result)

        # 从redis中获取用户token对应的用户信息，判断是否存在且合法
        user = redis_cli.get(token)
        if not user:
            logging.info("+++++ user_token: %s 不存在" % token)
            result = dict(code=1011, msg="未认证")
            return jsonify(result)

        # 更新token的过期时间
        redis_cli.expire(token, TOKEN_REDIS_EXPIRE_TIME)
        return f(*args, **kwargs)

    return decorated_function
